#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

// 全局变量
int bird_x,bird_y; // 小鸟位置 
int high,width; //  游戏画面尺寸
int score; // 得分
int bar_1,bar_2,bar_y;//障碍物位置 及小孔位置 


void gotoxy(int x,int y)  //光标移动到(x,y)位置
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void HideCursor() // 用于隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup() // 数据初始化
{
	high = 20;
	width = 30;
	bird_x = high/3;
	bird_y=10;	
	score = 0;
	bar_1=5;
	bar_2=bar_1+5; 
	bar_y=width/2;

	HideCursor(); // 隐藏光标
}

void show()  // 显示画面
{
	gotoxy(0,0);  // 光标移动到原点位置，以下重画清屏
	int i,j;
	for (i=0;i<=high;i++)
	{
		for (j=0;j<=width;j++)
		{
			if ((i==bird_x) && (j==bird_y))
				printf("@");  //输出小鸟@ 
			else if(j==bar_y&&(i<=bar_1||i>=bar_2))
				printf("*");  //输出移动障碍
			else if(i==0)
				printf("*");  //上方障碍
			else if(i==high)
				printf("*");  //下方障碍	
			else if(j==width)
				printf("|");  //输出有边界 
			else if(i==high)
				printf("_");  //输出下边界 
			else
				printf(" "); 
		}
		printf("\n");
	}
	printf("得分：%d\n",score/10);//输出得分 
}	

void updateWithoutInput()  // 与用户输入无关的更新
{	

}

void updateWithInput()  // 与用户输入有关的更新
{
	char a;
	if(kbhit()){
		a=getch();//玩家输入 
		if(a==' '){
			bird_x--;
		}
	}
}

int main()
{
	startup();  // 数据初始化	
	while (1) //  游戏循环执行
	{
		show();  // 显示画面
		updateWithoutInput();  // 与用户输入无关的更新
		updateWithInput();  // 与用户输入有关的更新
	}
	return 0;
}